
//#define BIT_SET_27          0x07FFFFFF
//#define BIT_SET_30          0x3FFFFFFF
//#define Zhoucol 0x40201
//typedef unsigned char byte;
//typedef unsigned short word;

/*
extern int TblMult3[9];  // 3*i
extern int TblMult9[9];  // 9*i
extern byte Tblmod3[27];  // i%3
extern int TblOtherMask9[9] ;
//extern byte Tbloffset[81]; //i%9

extern int Tbldiv3[27]; //i/3
extern int TblMod9[81]; //i%9 cell to column
extern int  Tblstartblock[27];
extern int Tblofftorow[27]; 
extern int Tblofftobox[27] ;
extern byte TblAnother1[27];
extern byte TblAnother2[27];
extern int TblBoard_BlockMask27[27]; //1<<i 
extern int TblRowMask[8];// rows where single  found  000 to 111
extern word TblShrinkUnsolved[8]; // only unsolved rows
extern int TblMask26row[9];


extern byte Tbloffset[81]; // giving cell to offset in a band
extern byte TblBoard_Block[81]; // giving cell -> band 
extern byte TblCelltoBox[81];
extern byte TblOtherSameBand[27][8]; // cleaning cells other digits
extern byte BitCount[512] ;
extern byte TblBitToInd[512] ;
extern byte TblBitIndex[257] ; // directly index 0_8
extern byte Tblfirst0_8[512] ;
extern byte TblShrinkMask[512] ;// existing minirows 000 to 111


extern int TblComplexMask[512]; // keep mini rows still valid optimised process
extern int TblKillMask[512]; // killed candidates pointing general
extern word TblComplexShort[512];  // same as complex  minirows still valid
extern word TblComplexShortBox[512];
extern word TblNewBoxRow[512]; // new minirow alone in box after shrink
extern byte TblRowUniq[512] ; // 1 is row not defined in block  mode  to 111
extern word TblColumnSingleinBox[512];
extern word TblColumnSingle[512]; // single in column applied to shrinked bloc
extern word TblShrinkSingle[512] ; // keep only rows with single
extern int TblMaskSingle[512]; // kill in other blocks locked column /box
extern int TblMaskDouble[512];// kill for locked in box / column

extern byte tv_string[1024];
extern word tv_strindex[256];
extern char *  empty_puzzle;
*/
//! a 9 bitfield to give position of candidate in a house and similar functions

/*
class BF16 {
public:
	word f;
	// constructors
	BF16() {f = 0;	}               
	BF16(int x) {f = 0x1ff;	}               
	inline int On(int ch) const {	return ((f & (1 << ch)));	}		
	inline int Off(int ch) const {	return (!(f & (1 << ch)));	}	
	inline void Set(word ch) {f |= (1 << ch);	}	
	inline void Clear(word ch) {	f &= ~(1 << ch);	}
	inline BF16 operator &(BF16 & e) const {		BF16 w;		w.f = f & e.f;		return w;	}
	inline BF16 operator |(BF16 & e) {		BF16 w;		w.f = f | e.f;		return w;	}
	inline BF16 operator ^(BF16 & e) {		BF16 w;		w.f = f ^ e.f;		return w;	}
	inline BF16 operator -(BF16 & e) {		BF16 w;		w.f = f ^ (e.f & f);		return w;	}
	inline int  operator ==(BF16 & e) {		return(e.f == f);	}
	inline void operator &=(BF16 & e) {	f &= e.f;	}
	inline void operator |=(BF16 & e) {	f |= e.f;	}
	inline void operator ^=(BF16 & e) {	f ^= e.f;	}
	inline void operator -=(BF16 & e) {	f ^= (f & e.f);	}
	inline int  First0_8() {return Tblfirst0_8[f];	}
	inline word bitCount() {	return BitCount[f];	}
	word String(word * rr);
	char * StringOut(char * out);

}; // BF16


*/